package com.shouhuyun.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.shouhuyun.constant.MessageConstant;
import com.shouhuyun.constant.RedisCheckConstant;
import com.shouhuyun.constant.RedisConstant;
import com.shouhuyun.entity.PageResult;
import com.shouhuyun.entity.QueryPageBean;
import com.shouhuyun.entity.Result;
import com.shouhuyun.pojo.CheckGroup;
import com.shouhuyun.service.CheckGroupService;
import com.shouhuyun.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.JedisPool;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 检查组管理
 */
@RestController
@RequestMapping("/checkgroup")
public class CheckGroupController {
    @Autowired
    private JedisPool jedisPool;
    @Autowired
    private RedisController redisController;
    @Reference
    private CheckGroupService checkGroupService;

    @RequestMapping("/add")
    //增添检查组
    public Result add(@RequestBody CheckGroup checkGroup, Integer[] checkitemIds) {
        try {
            //1. 接收两种类型的数据
            //2. 调用service层的接口  CheckGroupService
            checkGroupService.add(checkGroup, checkitemIds);
        } catch (Exception e) {
            e.printStackTrace();
//            新增失败
            return new Result(false, MessageConstant.ADD_CHECKGROUP_FAIL);
        }

        //将操作添加到redis中
        redisController.saveRedis(RedisCheckConstant.CHECKGROUP_ADD);
//        新增成功
        return new Result(true, MessageConstant.ADD_CHECKGROUP_SUCCESS);
    }

    @RequestMapping("/findPage")
    //分页查询检查组
//    接收  查询对象 queryPageBean  里面是 当前页 页面大小  查询条件  三个参数
    public PageResult findPage(@RequestBody QueryPageBean queryPageBean) {
        //将操作添加到redis中
        String s = queryPageBean.getQueryString();
        if (s != null && s != "")
            redisController.saveRedis(RedisCheckConstant.CHECKGROUP_QUERY);
//        调用pagequery方法
        return checkGroupService.Pagequery(queryPageBean);
    }

    //    根据检查组的id  查询检查组信息用于基本信息回显
    @RequestMapping("/findById")
    public Result findById(Integer id) {
        try {
            CheckGroup checkGroup = checkGroupService.findById(id);
//        查询检查组成功
            return new Result(true, MessageConstant.QUERY_CHECKGROUP_SUCCESS,checkGroup);
        } catch (Exception e) {
            e.printStackTrace();
//            查询检查组失败
            return new Result(false, MessageConstant.QUERY_CHECKGROUP_FAIL);
        }
    }

//    根据检查组ID查询检查组包含得多个检查项id
    @RequestMapping("/findCheckItemIdsByCheckGroupId")
    public Result findCheckItemIdsByCheckGroupId(Integer id){
        try {
            List<Integer> checkitemIds = checkGroupService.findCheckItemIdsByCheckGroupId(id);
//        查询检查组相关检查项成功
            return new Result(true, MessageConstant.QUERY_CHECKITEM_SUCCESS,checkitemIds);
        } catch (Exception e) {
            e.printStackTrace();
//            查询检查组相关检查项失败
            return new Result(false, MessageConstant.QUERY_CHECKITEM_FAIL);
        }

    }

//    编辑完成后 点击确定 保存数据
    @RequestMapping("/edit")
    public Result edit(@RequestBody CheckGroup checkGroup, Integer[] checkitemIds) {
        try {
            //1. 接收两种类型的数据
            //2. 调用service层的接口  CheckGroupService
            checkGroupService.edit(checkGroup, checkitemIds);
        } catch (Exception e) {
            e.printStackTrace();
//            编辑失败
            return new Result(false, MessageConstant.EDIT_CHECKGROUP_FAIL);
        }
        //将操作添加到redis中
        redisController.saveRedis(RedisCheckConstant.CHECKGROUP_EDIT);

//        编辑成功
        return new Result(true, MessageConstant.EDIT_CHECKGROUP_SUCCESS);
    }

//    删除检查组
    @RequestMapping("/delete")
    public Result delete(Integer id){
        try{
            checkGroupService.deleteById(id);
        }catch (Exception e){
            e.printStackTrace();
            //服务调用失败
            return new Result(false, MessageConstant.DELETE_CHECKGROUP_FAIL);
        }
        //将操作添加到redis中
        redisController.saveRedis(RedisCheckConstant.CHECKGROUP_DELETE);
        return  new Result(true, MessageConstant.DELETE_CHECKGROUP_SUCCESS);
    }


    // 新建套餐的时候  查询检查组的信息
    @RequestMapping("/findAll")
    public Result findAll() {
        try {
            List<CheckGroup> checkGroupList = checkGroupService.findAll();
            //        查找成功
            return new Result(true, MessageConstant.QUERY_CHECKGROUP_SUCCESS,checkGroupList);
        } catch (Exception e) {
            e.printStackTrace();
//            查找失败
            return new Result(false, MessageConstant.QUERY_CHECKGROUP_FAIL);
        }

    }

}
